From: kfraser@localhost.localdomain Date: Thu, 15 Mar 2007 10:38:06 +0000 (+0000) Subject: hvmloader: Simplify 32bit-bios relocator. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15289^2~2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=11f0262cf24014d0f089f043018845f8f743822c;p=xen.git hvmloader: Simplify 32bit-bios relocator. Signed-off-by: Stefan Berger --- diff --git a/tools/firmware/hvmloader/32bitbios_support.c b/tools/firmware/hvmloader/32bitbios_support.c index f9274090cc..bfde19577f 100644 --- a/tools/firmware/hvmloader/32bitbios_support.c +++ b/tools/firmware/hvmloader/32bitbios_support.c @@ -45,16 +45,11 @@ static int relocate_elf(unsigned char *elfarray) { return -1; } - for (i = 0; i < ehdr->e_shnum; i++) { - if (!(shdr[i]).sh_flags & SHF_ALLOC) { - shdr[i].sh_addr = 0; - continue; - } + for (i = 0; i < ehdr->e_shnum; i++) shdr[i].sh_addr = (Elf32_Addr)&elfarray[shdr[i].sh_offset]; - } for (i = 0; i < ehdr->e_shnum; i++) { - if (shdr[i].sh_type == SHT_REL && shdr[i].sh_addr != 0) { + if (shdr[i].sh_type == SHT_REL) { Elf32_Shdr *targetsec = (Elf32_Shdr *)&(shdr[shdr[i].sh_info]); Elf32_Shdr *symtabsec = (Elf32_Shdr *)&(shdr[shdr[i].sh_link]); Elf32_Sym *syms = (Elf32_Sym *)symtabsec->sh_addr; @@ -62,6 +57,10 @@ static int relocate_elf(unsigned char *elfarray) { unsigned char *code = (unsigned char *)targetsec->sh_addr; int j; + /* must not have been stripped */ + if (shdr[i].sh_size == 0) + return -6; + for (j = 0; j < shdr[i].sh_size / sizeof(Elf32_Rel); j++) { int idx = ELF32_R_SYM(rels[j].r_info); Elf32_Sym *symbol = &syms[idx];